package com.hliushi.learn.quartz;

import com.hliushi.learn.quartz.job.HelloJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

/**
 * 任务统一调度
 *
 * @author llhuang10
 * @date 2021/10/24 18:23
 */
public class HelloJobMain {


    /**
     * 问题:
     * 1.自定义任务HelloJob是单例, 还是每次执行定时任务都会创建一个实例呢?
     * .    通过构造器的方式测试了, 每次执行都会创建一个实例
     * 2.如何给定时任务传递参数并且在执行任务时可以获取到相应参数?
     * 3.是否可以使用cron表示式
     */
    public static void main(String[] args) throws SchedulerException {
        // 1.通过任务调度器工厂创建任务调度对象
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

        // 2.通过任务构建器对象创建任务实例
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJobDetail")
                .build();

        // 保存当前job状态信息, 一般和业务先关
        JobDataMap jobDataMap = jobDetail.getJobDataMap();
        jobDataMap.put("name", "llhuang10");
        jobDataMap.put("id", "2018010563");

        // 3.通过触发器构建对象创建触发器对象
        CronTrigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("myTrigger")
                .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
                .build();

        // 4.关联任务实例和触发器对象
        scheduler.scheduleJob(jobDetail, trigger);

        // 5.启动任务调度器, 开始任务调度
        scheduler.start();
    }
}
